package com.zw.pdm.module.est.service;

import com.zw.pdm.module.est.mapper.CopyCardMapper;
import com.zw.pdm.module.report.model.Project;
import com.zw.pdm.module.system.service.LogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;


/**
 * @Description:
 * @Author: China.wsg
 * @Date: 2021/6/19 9:12
 */
@Service
@SuppressWarnings("all")
public class CopyCardService {

    @Autowired
    private CopyCardMapper copyCardMapper;
    @Autowired
    private LogService logService;

    /**
     * @param proCodeS 被复制项目编号
     * @param proCodeC 复制项目编号
     * @Author wsg
     * @Date 9:20 2021/6/19
     * @Description 工艺卡复制
     **/
    @Transactional(rollbackFor = Exception.class)
    public int estCopy(String proCodeS, String proCodeC) {

        /** 校验是否允许复制 **/
        int errorCode = checkEstCopy(proCodeS, proCodeC);
        if (errorCode > 0) {
            return errorCode;
        }

        /** 开始复制 CreateCardService.save **/
        // 1、保存工艺卡主表 cra_card_sheet
        int rowCount = copyCardMapper.insertCardSheet(proCodeS, proCodeC, new Date());
        // 2、更新工艺卡主表外键 cra_card_sheet
        copyCardMapper.updateCardSheetMakeDetailId(proCodeC);
        // 3、保存工艺卡明细 cra_card_detail
        copyCardMapper.insertCardDetail(proCodeS, proCodeC);
        // 4、插入机加工时(注：先删后插) cra_worktime
        copyCardMapper.deleteWorkTimeByProCode(proCodeC);
        copyCardMapper.insertWorkTime(proCodeS, proCodeC);
        // 5、插入工艺路线表 cra_craft_route
        copyCardMapper.insertCraftRoute(proCodeS, proCodeC);
        // 6、更新制作件清单表状态信息 cra_make_sheet
        copyCardMapper.updateMakeSheetInfo(proCodeC);

        logService.saveLog("复用工艺卡", "被复制项目：" + proCodeS + "<br>复制项目：" + proCodeC
                + "<br>工艺卡复制数量：" + rowCount + "张");
        return 1;
    }


    /**
     * @param proCodeS 被复制项目编号
     * @param proCodeC 复制项目编号
     * @Author wsg
     * @Date 8:20 2021/6/21
     * @Description 工艺卡复制校验
     * 复制前校验规则：
     * 1、项目号必须存在（注：由于前台是下拉选，所以项目号都是存在且有效）
     * 2、被复制的项目工艺卡全部审核通过
     * 3、被复制的项目和复制的项目制作件清单要一致
     * 4、复制的项目没有创建过工艺卡
     **/
    private int checkEstCopy(String proCodeS, String proCodeC) {

        /** 2.被复制的项目全部审核通过 **/
        int notCheckCount = copyCardMapper.getSourceNotCheckCount(proCodeS);
        if (notCheckCount > 0) {
            return 10;
        }
        /** 3.被复制的项目和复制的项目制作件清单要一致 **/
        int notIdenticalCount = copyCardMapper.getNotIdenticalCount(proCodeS, proCodeC);
        if (notIdenticalCount > 0) {
            return 20;
        }
        /** 4.复制的项目没有创建过工艺卡 **/
        int createCardCount = copyCardMapper.getCreateCardCount(proCodeC);
        if (createCardCount > 0) {
            return 30;
        }
        return 0;
    }

    /**
     * 按项目编号查询项目信息
     */
    public List<Project> findProjectByCode(String code) {
        return copyCardMapper.findProjectByCode(code);
    }

}
